Imports System.Collections.Generic

Public Class ACColecciones

   Private m_listEstados As List(Of Lista)
   Private m_listTiposDocumento As List(Of Lista)
   Private m_listEstadoCivil As List(Of Lista)
   Private m_listSexo As List(Of Lista)

   Enum TipoColeccion
      Estados
      TipoDocumento
      EstadoCivil
      SexoGenero
   End Enum

   Public Shared ReadOnly Property Codigo() As String
      Get
         Return "Codigo"
      End Get
   End Property
   Public Shared ReadOnly Property Descripcion() As String
      Get
         Return "Descripcion"
      End Get

   End Property

#Region " Contructores "
   Public Sub New(ByVal m_opcion As TipoColeccion)

      Select Case m_opcion
         Case TipoColeccion.Estados
            m_listEstados = New List(Of Lista)()
            GetEstados()
         Case TipoColeccion.TipoDocumento
            m_listTiposDocumento = New List(Of Lista)()
            GetTiposDocumento()
         Case TipoColeccion.EstadoCivil
            m_listEstadoCivil = New List(Of Lista)()
            GetEstadoCivil()
         Case TipoColeccion.SexoGenero
            m_listSexo = New List(Of Lista)()
            GetSexo()
         Case Else
            GetEstados()
      End Select
   End Sub

#End Region

#Region " Propiedades "
   Public Property Estados() As List(Of Lista)
      Get
         Return m_listEstados
      End Get
      Set(ByVal value As List(Of Lista))
         m_listEstados = value
      End Set
   End Property

   Public Property TiposDocumento() As List(Of Lista)
      Get
         Return m_listTiposDocumento
      End Get
      Set(ByVal value As List(Of Lista))
         m_listTiposDocumento = value
      End Set
   End Property

   Public Property EstadoCivil() As List(Of Lista)
      Get
         Return m_listEstadoCivil
      End Get
      Set(ByVal value As List(Of Lista))
         m_listEstadoCivil = value
      End Set
   End Property

   Public ReadOnly Property Sexo() As List(Of Lista)
      Get
         Return m_listSexo
      End Get
   End Property
#End Region

#Region " Metodos "
   Public Sub GetEstados()
      Try
         m_listEstados = New List(Of Lista)
         ' INGRESADO
         m_listEstados.Add(New Lista("I", "Ingresado"))
         ' APROBADO
         m_listEstados.Add(New Lista("I", "Aprobado"))
         ' CONFIRMADO
         m_listEstados.Add(New Lista("C", "Confirmado"))
         ' ANULADO
         m_listEstados.Add(New Lista("X", "Anulado"))
      Catch
         Throw New Exception("Error: No se han podido obtener los Estados.")
      End Try
   End Sub

   Public Sub GetTiposDocumento()
      Try
         m_listTiposDocumento = New List(Of Lista)
         'D.N.I.
         m_listTiposDocumento.Add(New Lista("D", "D.N.I.", 8))
         'R.U.C.
         m_listTiposDocumento.Add(New Lista("R", "R.U.C.", 12))
         'Carnet de Extranjeria
         m_listTiposDocumento.Add(New Lista("N", "CARNET DE EXTRANJERIA", 15))
      Catch
         Throw New Exception("Error: No se han podido obtener los Estados.")
      End Try
   End Sub

   Public Sub GetEstadoCivil()
      Try
         m_listEstadoCivil = New List(Of Lista)
         ' SOLTERO
         m_listEstadoCivil.Add(New Lista("S", "Soltero(A)"))
         ' CASADO
         m_listEstadoCivil.Add(New Lista("C", "Casado(A)"))
         ' DIVORCIADO
         m_listEstadoCivil.Add(New Lista("D", "Divorciado(A)"))
         ' VIUDO
         m_listEstadoCivil.Add(New Lista("V", "Viudo(A)"))
         ' CONVIVIENTE
         m_listEstadoCivil.Add(New Lista("N", "Conviviente"))
      Catch
         Throw New Exception("Error: No se han podido obtener los Estados.")
      End Try
   End Sub

   Public Sub GetSexo()
      Try
         m_listSexo = New List(Of Lista)
         ' MASCULINO
         m_listSexo.Add(New Lista("M", "Masculino"))
         ' FEMENINO
         m_listSexo.Add(New Lista("F", "Femenino"))
      Catch
         Throw New Exception("Error: No se han podido obtener los Estados.")
      End Try
   End Sub
#End Region

#Region "Clases Auxiliares"
   Public Class Lista
      Implements ICloneable

#Region " Campos "
      Private m_Codigo As String
      Private m_Descripcion As String
      Private m_longitud As Integer
      Private m_estado As Boolean
#End Region

#Region " Constructor "
      Sub New(ByVal x_Codigo As String, ByVal x_Descripcion As String)
         Codigo = x_Codigo
         Descripcion = x_Descripcion
      End Sub

      Sub New(ByVal x_Codigo As String, ByVal x_Descripcion As String, ByVal x_longitud As Integer)
         Codigo = x_Codigo
         Descripcion = x_Descripcion
         m_longitud = x_longitud
      End Sub
#End Region

#Region " Propiedades "
      Public Property Codigo() As String
         Get
            Return m_Codigo
         End Get
         Set(ByVal value As String)
            m_Codigo = value
         End Set
      End Property
      Public Property Descripcion() As String
         Get
            Return m_Descripcion
         End Get
         Set(ByVal value As String)
            m_Descripcion = value
         End Set
      End Property

      Public Property Longitud() As Integer
         Get
            Return m_longitud
         End Get
         Set(ByVal value As Integer)
            m_longitud = value
         End Set
      End Property

      Public Property Estado() As Boolean
         Get
            Return m_estado
         End Get
         Set(ByVal value As Boolean)
            m_estado = value
         End Set
      End Property


#End Region

      Public Function Clone() As Object Implements System.ICloneable.Clone
         Try
            Dim cloneInstance As Lista
            cloneInstance = DirectCast(Me, Lista)
            Return cloneInstance.MemberwiseClone()
         Catch ex As Exception
            Throw ex
         End Try
      End Function
   End Class
#End Region
End Class
